import datetime
import random

from flask_script import Manager
from flask_migrate import MigrateCommand

from info import create_app

app = create_app("dev")

# 创建管理器
mrg = Manager(app)

# 使用管理器生成管理命令
mrg.add_command("mc", MigrateCommand)


# 创建管理员  利用管理器创建命令
@mrg.option("-u", dest="username")  # python main.py create_superuser -u admin -p 1234567
@mrg.option("-p", dest="password")  # 可以将有参数的函数转换成 命令形式
def create_superuser(username, password):
    if not all([username, password]):
        app.logger.error("生成管理员失败:参数不足")
        return

    from info.utils.models import User
    from info import db
    # 生成管理员 user表的用户数据，is_admain字段设置为Ture
    user = User()
    user.mobile = username
    user.password = password
    user.nick_name = username
    user.is_admin = True
    # 添加到会话
    db.session.add(user)
    try:
        db.session.commit()
    except BaseException as e:
        app.logger.error("生成管理员失败 %s" % e)
        db.session.rollback()
        return
    app.logger.info("生成管理员成功")


# 添加测试数据
@mrg.command
def add_test_users():
    """添加测试数据"""
    from info.utils.models import User
    from info import db
    users = []
    now = datetime.datetime.now()  # 取当前时间
    for num in range(0, 10000):
        try:
            user = User()
            user.nick_name = "%011d" % num
            user.mobile = "%011d" % num
            user.password_hash = "pbkdf2:sha256:50000$SgZPAbEj$a253b9220b7a916e03bf27119d401c48ff4a1c81d7e00644e0aaf6f3a8c55829"
            # 随机生成时间 范围：上个月到本月当前时间
            user.create_time = now - datetime.timedelta(seconds=random.randint(0, 2678400))
            users.append(user)
            print(user.mobile)
        except Exception as e:
            print(e)
    # with app.app_context():
        db.session.add_all(users)
        db.session.commit()
    print('OK')


# @mrg.command   # 可以将 无参函数 生成命令
# def demo1():
#     print("demo")

if __name__ == '__main__':
    # print(app.url_map)
    mrg.run()
